const Joi = require('joi');

// 2. 定义验证规则
// 注意：如果客户端提交的某些参数项未在 schema 中定义，
// 此时，这些多余的参数项默认会被忽略掉
// 定义  注册和登录  的表单验证规则
const userSchema = {
    // 2.1 校验 req.body 中的数据  req.body 用于获取表单中的数据 req.query 用于获取查询字符串数据 req.parmas 用于获取：id携带的参数
    /**
     * string() 值必须是字符串
     * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
     * min(length) 最小长度
     * max(length) 最大长度
     * required() 值是必填项，不能为 undefined
     * pattern(正则表达式) 值必须符合正则表达式的规则
     */
    body: {
        username: Joi.string().alphanum().min(1).max(12).required(),
        password: Joi.string().pattern(/^[\S]{6,15}$/).required(),
        repassword: Joi.ref('password'),
    },
};
// 定义  更新用户信息  的表单验证规则
const updateUserInfoSchema = {
    body: {
        nickname: Joi.string().min(1).max(8).required(),
        email: Joi.string().email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
    },
};
// 定义  重置密码  的表单验证规则
const resetSecretSchema = {
    body: {
        oldPwd: Joi.string().pattern(/^[\S]{6,15}$/).required(),
        newPwd: Joi.string().pattern(/^[\S]{6,15}$/).required().not(Joi.ref('oldPwd')),
        // newPwd: Joi.string().pattern(/^[\S]{6,15}$/).required(),
        // 使用 joi.not(joi.ref('oldPwd')).concat(password) 
    },

};
// 定义 更新头像  的表单验证规则
const avatarSchema = {
    // dataUri() 指的是如下格式的字符串数据：
    // 
    body: {
        avatar: Joi.string().dataUri().required()
    }
};
// module.exports.userSchema = userSchema;
// module.exports.updateUserInfoSchema = updateUserInfoSchema;
// module.exports.resetSecretSchema = resetSecretSchema;
// 两种方法是等价的
module.exports = {
    userSchema,
    updateUserInfoSchema,
    resetSecretSchema,
    avatarSchema
};